#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdlib.h>
#include <string.h>

// key_t ftok(const char *pathname, int proj_id);

struct msgbuf
{
    long mtype;       // 数据的编号
    char mtext[1024]; // 数据的正文
};


int main()
{
    // key_t key1 = ftok("./", 10);
    // key_t key2 = ftok("./", 10);
    // printf("key1 = %d key2 = %d\n", key1, key2);

    key_t key = ftok("./", 100);
    int msgid = msgget(key, IPC_CREAT | 0666);
    // 根据key值获取消息队列的ID，如果消息队列不存在则创建

    printf("%#x %d\n", key, msgid);

    // 创建消息结构体
    struct msgbuf data;
    memset(&data, 0, sizeof(data));

    while (1)
    {
        int ret = msgrcv(msgid, &data, sizeof(data.mtext), 100, 0);
        // printf("msgrcv ret :%d data:%s\n", ret, data.mtext);
        printf("新消息：%s", data.mtext);

        if (ret == -1)
        {
            perror("msgrcv");
        }
    }
    return 0;
}
